#pragma once

/// @file

/// @namespace pcpp
/// @brief The main namespace for the PcapPlusPlus lib
namespace pcpp
{
	/// An enum for all possible DNS record types
	enum DnsType
	{
		/// IPv4 address record
		DNS_TYPE_A = 1,
		/// Name Server record
		DNS_TYPE_NS,
		/// Obsolete, replaced by MX
		DNS_TYPE_MD,
		/// Obsolete, replaced by MX
		DNS_TYPE_MF,
		/// Canonical name record
		DNS_TYPE_CNAME,
		/// Start of Authority record
		DNS_TYPE_SOA,
		/// mailbox domain name record
		DNS_TYPE_MB,
		/// mail group member record
		DNS_TYPE_MG,
		/// mail rename domain name record
		DNS_TYPE_MR,
		/// Null record
		DNS_TYPE_NULL_R,
		/// well known service description record
		DNS_TYPE_WKS,
		/// Pointer record
		DNS_TYPE_PTR,
		/// Host information record
		DNS_TYPE_HINFO,
		/// mailbox or mail list information record
		DNS_TYPE_MINFO,
		/// Mail exchanger record
		DNS_TYPE_MX,
		/// Text record
		DNS_TYPE_TXT,
		/// Responsible person record
		DNS_TYPE_RP,
		/// AFS database record
		DNS_TYPE_AFSDB,
		/// DNS X25 resource record
		DNS_TYPE_X25,
		/// Integrated Services Digital Network record
		DNS_TYPE_ISDN,
		/// Route Through record
		DNS_TYPE_RT,
		/// network service access point address record
		DNS_TYPE_NSAP,
		/// network service access point address pointer record
		DNS_TYPE_NSAP_PTR,
		/// Signature record
		DNS_TYPE_SIG,
		/// Key record
		DNS_TYPE_KEY,
		/// Mail Mapping Information record
		DNS_TYPE_PX,
		/// DNS Geographical Position record
		DNS_TYPE_GPOS,
		/// IPv6 address record
		DNS_TYPE_AAAA,
		/// Location record
		DNS_TYPE_LOC,
		/// Obsolete record
		DNS_TYPE_NXT,
		/// DNS Endpoint Identifier record
		DNS_TYPE_EID,
		/// DNS Nimrod Locator record
		DNS_TYPE_NIMLOC,
		/// Service locator record
		DNS_TYPE_SRV,
		/// Asynchronous Transfer Mode address record
		DNS_TYPE_ATMA,
		/// Naming Authority Pointer record
		DNS_TYPE_NAPTR,
		/// Key eXchanger record
		DNS_TYPE_KX,
		/// Certificate record
		DNS_TYPE_CERT,
		/// Obsolete, replaced by AAAA type
		DNS_TYPE_A6,
		/// Delegation Name record
		DNS_TYPE_DNAM,
		/// Kitchen sink record
		DNS_TYPE_SINK,
		/// Option record
		DNS_TYPE_OPT,
		/// Address Prefix List record
		DNS_TYPE_APL,
		/// Delegation signer record
		DNS_TYPE_DS,
		/// SSH Public Key Fingerprint record
		DNS_TYPE_SSHFP,
		/// IPsec Key record
		DNS_TYPE_IPSECKEY,
		/// DNSSEC signature record
		DNS_TYPE_RRSIG,
		/// Next-Secure record
		DNS_TYPE_NSEC,
		/// DNS Key record
		DNS_TYPE_DNSKEY,
		/// DHCP identifier record
		DNS_TYPE_DHCID,
		/// NSEC record version 3
		DNS_TYPE_NSEC3,
		/// NSEC3 parameters
		DNS_TYPE_NSEC3PARAM,
		/// All cached records
		DNS_TYPE_ALL = 255
	};

	/// An enum for all possible DNS classes
	enum DnsClass
	{
		/// Internet class
		DNS_CLASS_IN = 1,
		/// Internet class with QU flag set to True
		DNS_CLASS_IN_QU = 32769,
		/// Chaos class
		DNS_CLASS_CH = 3,
		/// Hesiod class
		DNS_CLASS_HS = 4,
		/// ANY class
		DNS_CLASS_ANY = 255
	};

	/// An enum for representing the 4 types of possible DNS records
	enum DnsResourceType
	{
		/// DNS query record
		DnsQueryType = 0,
		/// DNS answer record
		DnsAnswerType = 1,
		/// DNS authority record
		DnsAuthorityType = 2,
		/// DNS additional record
		DnsAdditionalType = 3
	};

}  // namespace pcpp
